"""
题目：孤立顶点是指没有任何边连接的顶点，给定一个图（无向 / 有向均可），返回所有孤立顶点的列表。
"""

class Graph:
    def __init__(self, is_directed=False):
        self.vertices = {}
        self.is_directed = is_directed

    def add_vertex(self, vertex):
        if vertex not in self.vertices:
            self.vertices[vertex] = []

    def add_edge(self, v1, v2):
        self.add_vertex(v1)
        self.add_vertex(v2)
        self.vertices[v1].append(v2)
        if not self.is_directed:
            self.vertices[v2].append(v1)

    def find_isolated_vertices(self):
        """查找图中所有孤立顶点（无邻接顶点的顶点）"""
        isolated = []
        for vertex in self.vertices:
            # 邻接列表为空 → 孤立顶点
            if len(self.vertices[vertex]) == 0:
                isolated.append(vertex)
        return isolated

# 测试
if __name__ == "__main__":
    # 测试无向图
    undir_graph = Graph()
    undir_graph.add_vertex(0)  # 孤立顶点
    undir_graph.add_vertex(1)  # 孤立顶点
    undir_graph.add_edge(2, 3)
    undir_graph.add_edge(3, 4)
    print("无向图孤立顶点:", undir_graph.find_isolated_vertices())  # 输出: [0, 1]

    # 测试有向图
    dir_graph = Graph(is_directed=True)
    dir_graph.add_vertex('A')  # 孤立顶点
    dir_graph.add_edge('B', 'C')
    dir_graph.add_edge('C', 'D')
    dir_graph.add_vertex('E')  # 孤立顶点
    print("有向图孤立顶点:", dir_graph.find_isolated_vertices())  # 输出: ['A', 'E']